From: Debarshi Ray Date: Mon, 16 Jun 2014 18:28:17 +0000 (+0200) Subject: screenshot: Scale and unscale the area for HiDpi displays X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~2412 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=b04c79643d4a5c5567362244c5e11d37486e3c9d;p=gnome-shell.git screenshot: Scale and unscale the area for HiDpi displays https://bugzilla.gnome.org/show_bug.cgi?id=731738 --- diff --git a/js/ui/screenshot.js b/js/ui/screenshot.js index 4c9c750d0..2f17729b9 100644 --- a/js/ui/screenshot.js +++ b/js/ui/screenshot.js @@ -85,8 +85,27 @@ const ScreenshotService = new Lang.Class({ invocation.return_value(retval); }, + _scaleArea: function(x, y, width, height) { + let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; + x *= scaleFactor; + y *= scaleFactor; + width *= scaleFactor; + height *= scaleFactor; + return [x, y, width, height]; + }, + + _unscaleArea: function(x, y, width, height) { + let scaleFactor = St.ThemeContext.get_for_stage(global.stage).scale_factor; + x /= scaleFactor; + y /= scaleFactor; + width /= scaleFactor; + height /= scaleFactor; + return [x, y, width, height]; + }, + ScreenshotAreaAsync : function (params, invocation) { let [x, y, width, height, flash, filename, callback] = params; + [x, y, width, height] = this._scaleArea(x, y, width, height); if (!this._checkArea(x, y, width, height)) { invocation.return_error_literal(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED, @@ -121,9 +140,9 @@ const ScreenshotService = new Lang.Class({ selectArea.connect('finished', Lang.bind(this, function(selectArea, areaRectangle) { if (areaRectangle) { - let retval = GLib.Variant.new('(iiii)', - [areaRectangle.x, areaRectangle.y, - areaRectangle.width, areaRectangle.height]); + let retRectangle = this._unscaleArea(areaRectangle.x, areaRectangle.y, + areaRectangle.width, areaRectangle.height); + let retval = GLib.Variant.new('(iiii)', retRectangle); invocation.return_value(retval); } else { invocation.return_error_literal(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED, @@ -134,6 +153,7 @@ const ScreenshotService = new Lang.Class({ FlashAreaAsync: function(params, invocation) { let [x, y, width, height] = params; + [x, y, width, height] = this._scaleArea(x, y, width, height); if (!this._checkArea(x, y, width, height)) { invocation.return_error_literal(Gio.IOErrorEnum, Gio.IOErrorEnum.CANCELLED,